/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.upn.sigemfi.sac.beans;

import edu.upn.sigemfi.sac.bc.DocumentoDelegate;
import edu.upn.sigemfi.sac.bc.ParametroScoringDelegate;
import edu.upn.sigemfi.sac.bc.ProductoSbsDelegate;
import edu.upn.sigemfi.sac.be.Documento;
import edu.upn.sigemfi.sac.be.ParametroScoring;
import edu.upn.sigemfi.sac.be.ProductoParametro;
import edu.upn.sigemfi.sac.be.ProductoParametroPK;
import edu.upn.sigemfi.sac.be.ProductoSbs;
import edu.upn.sigemfi.sac.be.SubProducto;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.model.SelectItem;

/**
 *
 * @author Colao
 */
public class ProductoSbsController extends AbstractController{

    private ProductoSbsDelegate delegado;
    private ParametroScoringDelegate delegadoParametroScoring;
    private DocumentoDelegate delegadoDocumento;

    private ProductoSbs tipoCredito;
    private SubProducto subTipoCredito;
    private ParametroScoring parametro;
    private ProductoParametro pParametro;
    private Documento documento;

    private Integer estadoNuevoPP;
    private Integer estadoVerProducto;
    private Integer estadoVerSubProducto;

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }

    public Integer getEstadoVerSubProducto() {
        return estadoVerSubProducto;
    }

    public void setEstadoVerSubProducto(Integer estadoVerSubProducto) {
        this.estadoVerSubProducto = estadoVerSubProducto;
    }

    public Integer getEstadoNuevoPP() {
        return estadoNuevoPP;
    }

    public void setEstadoNuevoPP(Integer estadoNuevoPP) {
        this.estadoNuevoPP = estadoNuevoPP;
    }

    public ProductoParametro getProParam() {
        return pParametro;
    }

    public void setProParam(ProductoParametro pParametro) {
        this.pParametro = pParametro;
    }



    public ParametroScoring getParametro() {
        return parametro;
    }

    public void setParametro(ParametroScoring parametro) {
        this.parametro = parametro;
    }

   


    public Integer getEstadoVerProducto() {
        return estadoVerProducto;
    }

    public void setEstadoVerProducto(Integer estadoVerProducto) {
        this.estadoVerProducto = estadoVerProducto;
    }



    public ProductoSbsController() {
        delegado = new ProductoSbsDelegate();
        delegadoParametroScoring = new ParametroScoringDelegate();
        delegadoDocumento = new DocumentoDelegate();
    }


    public SubProducto getSubTipoCredito() {
        return subTipoCredito;
    }

    public void setSubTipoCredito(SubProducto subTipoCredito) {
        this.subTipoCredito = subTipoCredito;
    }

    public ProductoSbs getTipoCredito() {
        return tipoCredito;
    }

    public void setTipoCredito(ProductoSbs tipoCredito) {
        this.tipoCredito = tipoCredito;
    }

    public String nuevoSubProducto(){
        subTipoCredito = new SubProducto();
        tipoCredito =  null;
        return "nuevoSubProducto";
    }

    public String nuevoProducto(){
        tipoCredito = new ProductoSbs();
        return "nuevoProducto";
    }
    
    public String gestionarProducto(){
        tipoCredito = null;
        return "gestionar";
    }

    public List<ProductoSbs> getListaProductos(){
        List<ProductoSbs> productos = null;
        try {
            productos = delegado.getProductosSBS();

        } catch (Exception ex) {
            Logger.getLogger(SolicitudCreditoController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
        }
        return productos;
    }


    public String mostrarSubProductos(){
        return "";
    }

    public String registrar(){
        try {
            delegado.crear(tipoCredito);
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError("Registrar ProductoSBS...");
        }
        
        return "volver";
    }

    public String registrarSubProducto(){
        try {
            delegado.crearSubProducto(subTipoCredito);
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError("Registrar SubProducto...");
        }
        
        return "volver";
    }

    public SelectItem[] getProductos(){
        List<ProductoSbs> productos;
        SelectItem[] selects = null;
        try {
            productos = delegado.getProductosSBS();
            selects = new SelectItem[productos.size() + 1];
            int i = 0;
            selects[i++] = new SelectItem(null, "Seleccione un Tipo de Credito");
            for (ProductoSbs p : productos) {
                selects[i++] = new SelectItem(p, p.getNombre());
            }
        } catch (Exception e) {
            selects = new SelectItem[1];
            selects[0] = new SelectItem(null, "Error al momento de consultar los datos");
            System.out.println(e.getMessage());
            mostrarError(e.getMessage());
        }
        return selects;
    }

    public String verProducto(){
        estadoVerProducto = 0;
        return "verProducto";
    }

    public String verSubProducto(){
        estadoVerSubProducto = 0;
        return "verSubProducto";
    }

    public String actualizarProducto(){
        try {
            delegado.editar(tipoCredito);
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
        }
        return "volver";
    }

    public String actualizarSubProducto(){
        try {
            delegado.editarSubProducto(subTipoCredito);
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
        }
        return "volver";
    }

    public String activarEditarSubProducto(){

        estadoVerSubProducto = 1;
        return "";
    }

    public String desactivarEditarSubProducto(){

        estadoVerSubProducto = 0;
        return "";
    }

    public String activarEditarProducto(){
        
        estadoVerProducto = 1;
        return "";
    }

    public String desactivarEditarProducto(){
        
        estadoVerProducto = 0;
        return "";
    }

    public String seleccionarParametro(){
        estadoNuevoPP = 0;
        pParametro = new ProductoParametro();
        pParametro.setParametroScoring(parametro);
        pParametro.setProductoSbs(tipoCredito);
        ProductoParametroPK pk = new ProductoParametroPK(tipoCredito.getIdProductoSbs(), parametro.getIdParametroScoring());
        pParametro.setProductoParametroPK(pk);

        return "nuevoProductoParametro";
    }

    public String editarParametro(){
        estadoNuevoPP = 1;
        return "editarProductoParametro";
    }

    public String agregarDocumento(){
        return "agregarDocumento";
    }
    
    public String seleccionarDocumento(){
        List<SubProducto> subs = documento.getSubProductoCollection();
        for(SubProducto sub: subs){
            if(sub.getIdSubProducto() == subTipoCredito.getIdSubProducto()){
                mostrarError("Este Documento ya ha sido Agregado");
                return "";
            }
        }
        List<Documento> docs = subTipoCredito.getDocumentoCollection();
        subs.add(subTipoCredito);
        docs.add(documento);

        subTipoCredito.setDocumentoCollection(docs);
        documento.setSubProductoCollection(subs);
        try {
            delegadoDocumento.editar(documento);
            delegado.editarSubProducto(subTipoCredito);
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
            return "";
        }

        return "volver";
    }

    public String quitarDocumento(){
        List<SubProducto> subs = documento.getSubProductoCollection();
        List<Documento> docs = subTipoCredito.getDocumentoCollection();
        subs.remove(subTipoCredito);
        docs.remove(documento);

        subTipoCredito.setDocumentoCollection(docs);
        documento.setSubProductoCollection(subs);
        try {
            delegadoDocumento.editar(documento);
            delegado.editarSubProducto(subTipoCredito);
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
            return "";
        }

        return "";
    }

    public String agregarParametroScoring(){
        return "agregarParametro";
    }


    public String modificarParametroScoring(){
        return "editarParametro";
    }

    public String eliminarProductoParametro(){
        try {
            delegado.eliminarPP(pParametro);
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
        }

        return "";
    }
    
    public String guardarProductoParametro(){
        try {
            if(estadoNuevoPP == 0){
                delegado.crearPP(pParametro);

                List<ProductoParametro> pps =  tipoCredito.getProductoParametroCollection();
                pps.add(pParametro);
                tipoCredito.setProductoParametroCollection(pps);
            }
            else if(estadoNuevoPP == 1)
                delegado.editarPP(pParametro);
            
        } catch (Exception ex) {
            Logger.getLogger(ProductoSbsController.class.getName()).log(Level.SEVERE, null, ex);
            mostrarError(ex.getMessage());
            return "";
        }
        
        return "cancelar";
    }

    public String cancelarNuevoPP(){
        String cad = "";
        if(estadoNuevoPP == 0)
            cad = "volver";
        else if(estadoNuevoPP == 1)
            cad = "cancelar";
        return cad;
    }
}

